package com.lfy.chat.service;

import com.lfy.auth.domain.entity.UserEntity;
import com.lfy.chat.domain.bo.FriendBO;
import com.lfy.chat.domain.request.AgreeFriendReq;
import com.lfy.chat.domain.request.NoAgreeFriendReq;
import com.lfy.chat.domain.request.addFriendReq;
import com.lfy.chat.domain.request.SingleMsgReq;
import com.lfy.chat.domain.response.*;
import com.lfy.chat.domain.ws.req.ChatReq;
import com.lfy.common.result.R;
import io.netty.channel.Channel;

import java.util.List;
import java.util.Map;


public interface ChatService {
    /**
     * 用户断开连接
     * @param channel ws
     */
    void unBind(Channel channel);

    /**
     * 登录鉴权
     * @param channel ws
     * @param chatReq req
     */
    void login(Channel channel, ChatReq chatReq);

    /**
     * 单聊
     * @param msgReq req
     * @param user 用户
     * @return R
     */
    R<Void> singleSend(SingleMsgReq msgReq, UserEntity user);

    /**
     * 获取离线消息
     * @param user 用户
     * @return R
     */
    R<List<OfflineListResp>> getOfflineMsg(UserEntity user);

    /**
     * 添加好友
     * @param user 用户
     * @param req req
     * @return R
     */
    R<Void> addFriend(UserEntity user, addFriendReq req);

    /**
     * 获取离线好友申请记录
     * @param user 用户
     * @return R
     */
    R<List<OfflineFriendResp>> getOfflineFriendMsg(UserEntity user);

    /**
     * 同意好友申请
     * @param user 用户
     * @param agreeFriendReq id
     * @return R
     */
    R<Void> agreeFriend(UserEntity user, AgreeFriendReq agreeFriendReq);

    /**
     * 对话列表
     * @param user 用户
     * @return R
     */
    R<List<FriendBO>> getChatNowFriendList(UserEntity user);

    /**
     * 从会话列表删除
     * @param user 用户
     * @param id 朋友id
     * @return void
     */
    R<Void> removeNotChat(UserEntity user, String id);

    /**
     * 拒绝添加好友
     * @param user 用户
     * @param noAgreeFriendReq 消息id
     * @return void
     */
    R<Void> noAgreeFriend(UserEntity user, NoAgreeFriendReq noAgreeFriendReq);

    /**
     * 获取验证消息列表
     * @param entity 用户
     * @return
     */
    R<List<VerifyMsgResp>> getVerifyMsgList(UserEntity entity);

    /**
     * 获取好友列表
     * @param user 用户
     * @return
     */
    R<List<UserFriendResp>> getFriendList(UserEntity user);

    /**
     * 添加对话列表
     * @param user 用户
     * @param id 好友id
     * @return
     */
    R<Void> addFriendNowChat(UserEntity user, String id);

    /**
     * 删除好友
     * @param id
     * @return
     */
    R<Void> delFriend(UserEntity user,String id);
}
